相关文章 * [Arch packaging standards](/index.php/Arch_packaging_standards "Arch packaging standards") * [Arch Build System (简体中文)](/index.php/Arch_Build_System_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) "Arch Build System (简体中文)") * [Creating packages](/index.php/Creating_packages "Creating packages") * [PKGBUILD (简体中文)](/index.php/PKGBUILD_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) "PKGBUILD (简体中文)") * [Category:Package development](/index.php/Category:Package_development "Category:Package development") * [Pacman tips](/index.php/Pacman_tips "Pacman tips") * [Arch User Repository (简体中文)](/index.php/Arch_User_Repository_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) "Arch User Repository (简体中文)") * [makepkg (简体中文)](/index.php/Makepkg_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) "Makepkg (简体中文)") * [pacman (简体中文)](/index.php/Pacman_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) "Pacman (简体中文)") **翻译状态:** 本文是英文页面 [.SRCINFO](/index.php/.SRCINFO ".SRCINFO") 的[翻译](/index.php/ArchWiki_Translation_Team_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) "ArchWiki Translation Team (简体中文)"),最后翻译时间:2016-04-02,点击[这里](https://wiki.archlinux.org/index.php?title=.SRCINFO&diff=0&oldid=429252)可以查看翻译后英文页面的改动。 `.SRCINFO` 用一个简单直接的格式记录软件包的元数据。[AUR](/index.php/AUR "AUR") 的网站后台或 [AUR 工具](/index.php/AUR_helpers "AUR helpers") 可以不用解析 [PKGBUILD](/index.php/PKGBUILD "PKGBUILD") 就获得需要的信息。 **警告:** 对 `PKGBUILD` 元数据的修改例如 [pkgver()](/index.php/PKGBUILD#pkgver "PKGBUILD") 更新,不会自动同步到 `.SRCINFO`. 如果修改了 `PKGBUILD` 但是没更新 `.SRCINFO` 会导致 AUR 使用错误的数据。 ## 生成 可以通过 makepkg 或者 [pkgbuild-introspection](https://aur.archlinux.org/packages/pkgbuild-introspection/) 提供的 `mksrcinfo` 自动生成 `.SRCINFO` 文件: ``` $ makepkg --printsrcinfo > .SRCINFO ``` ## 语法 `.SRCINFO` 按行解析,每一行由像`key[_arch] = value`一样的键值对组成. 每一个键都是一个字段,键值与[PKGBUILD 变量](https://www.archlinux.org/pacman/PKGBUILD.5.html#_options_and_directives)对应. 变量和数值都不应该加引号。等号两边一定要有一个空格(即使值为空)而且值之间不能包含逗号. 有些值在 `PKGBUILD` 中是数组,需要变为同样的值多次指定,例如: ``` # PKGBUILD arch=(i686 x86_64) ``` 需要变为: ``` # .SRCINFO arch = i686 arch = x86_64 ``` 文件以 [pkgbase](/index.php/PKGBUILD#pkgbase "PKGBUILD") 声明开头,此段落包含适用于整个程序的数据。标准的 `PKGBUILD` 描述了一个单独的软件包,那么这就是唯一的主段落,后面跟着 [pkgname](/index.php/PKGBUILD#pkgname "PKGBUILD") 声明包含软件包的名称。 ``` pkgbase = foo pkgdesc = An example package. [...] md5sums = SKIP pkgname = foo ``` 如果 `PKGBUILD` 包含多个软件包,那么每个段落都以 `pkgname` 开头,然后记录针对那个软件包的数据。 ## 要求 下面字段只能在`.SRCINFO` 文件的 `pkgbase` 段落出现一次: * `pkgver`, `pkgrel`, `epoch` 下面字段可以在任何字段出现,每段落最多一次: * `pkgdesc`, `url`, `install`, `changelog` 下面字段可以在一个段落里多次出现: * `arch` * `groups` * `license` * `noextract` * `options` * `backup` * `validpgpkeys` 下列的字段名称会重复出现,也许有 [体系结构](/index.php/PKGBUILD#arch "PKGBUILD") 作为后缀 ``` source*_x86_64* = [https://foo.bar/file.tar.gz](https://foo.bar/file.tar.gz) source*_i686* = [https://foo.bar/file_i686_patch.tar.gz](https://foo.bar/file_i686_patch.tar.gz) ``` * `source` * `depends`, `checkdepends`, `makedepends`, `optdepends` * `provides`, `conflicts`, `replaces` * `md5sums`, `sha1sums`, `sha224sums`, `sha256sums`, `sha384sums`, `sha512sums` 其它字段名称,换行和带有"#"的行会被忽略.